package com.dh.leetcode.one;

import org.junit.Assert;
import org.junit.Test;

/**
 * @ClassName: _168_excel_sheet_column_title
 * @Description: 168. Excel表列名称
 * 给定一个正整数，返回它在 Excel 表中相对应的列名称。
 * <p>
 * 例如，
 * <p>
 * 1 -> A
 * 2 -> B
 * 3 -> C
 * ...
 * 26 -> Z
 * 27 -> AA
 * 28 -> AB
 * ...
 * 示例 1:
 * <p>
 * 输入: 1
 * 输出: "A"
 * 示例 2:
 * <p>
 * 输入: 28
 * 输出: "AB"
 * 示例 3:
 * <p>
 * 输入: 701
 * 输出: "ZY"
 * <p>
 * https://leetcode-cn.com/problems/excel-sheet-column-title/
 * @Author: shouzimu
 * @Date: 2021/1/15 10:35
 */
public class _168_excel_sheet_column_title {

    /**
     * 十进制转26进制
     *
     * 抄袭的java方法，因为没有0，调试了半天
     *
     * @param n
     * @return
     */
    public String convertToTitle(int n) {
        int radix = 26;
        char buf[] = new char[33];
        int charPos = 32;
        while (n > 0) {
            n--;
            buf[charPos--] = digits[(n % radix)];
            n = n / radix;
        }
        return new String(buf, charPos, (33 - charPos)).trim();
    }

    final static char[] digits = {
            'A', 'B',
            'C', 'D', 'E', 'F', 'G', 'H',
            'I', 'J', 'K', 'L', 'M', 'N',
            'O', 'P', 'Q', 'R', 'S', 'T',
            'U', 'V', 'W', 'X', 'Y', 'Z'
    };

    @Test
    public void convertToTitleTest() {
        Assert.assertEquals("AZ", convertToTitle(52));
        Assert.assertEquals("NTP", convertToTitle(10000));
    }
}
